import { IParam, EntityBase } from '@/core';
import { IOPEN_ACCESS } from './interface/i-open-access';
import OPEN_ACCESSKeys from './open-access-keys';

/**
 * 开放接入基类
 * 基于template/src/api/{{appEntities}}/{{appEntities}}-base.ts.hbs生成
 *
 * @export
 * @abstract
 * @class OPEN_ACCESSBase
 * @extends { EntityBase }
 * @implements { IOPEN_ACCESS }
 */
export abstract class OPEN_ACCESSBase
	extends EntityBase
	implements IOPEN_ACCESS
{
	/**
	 * 实体名称
	 *
	 * @readonly
	 * @type {string}
	 * @memberof OPEN_ACCESSBase
	 */
	get srfdename(): string {
		return 'OPEN_ACCESS';
	}

	/**
	 * 当前实体所有属性
	 *
	 * @protected
	 * @type {string[]}
	 * @memberof OPEN_ACCESSBase
	 */
	protected get keys(): string[] {
		return OPEN_ACCESSKeys;
	}

	/**
	 * Creates an instance of ConstactOppoBase.
	 * @param {*} [data]
	 * @memberof OPEN_ACCESSBase
	 */
	constructor(data?: any) {
		super();
		this.setData(data);
	}

	get srfkey(): string {
		return this.id;
	}

	set srfkey(val: string) {
		this.id = val;
	}

	/**
	 * 标识
	 **/
	id?: any;

	get srfmajortext(): string {
		return this.name;
	}

	set srfmajortext(val: string) {
		this.name = val;
	}
	/**
	 * 名称
	 **/
	name?: any;

	/**
	 * 逻辑有效标记
	 **/
	enabled?: any;

	/**
	 * 创建人
	 **/
	creator?: any;

	/**
	 * 创建时间
	 **/
	create_time?: any;

	/**
	 * 最后更新人
	 **/
	updater?: any;

	/**
	 * 最后更新时间
	 **/
	update_time?: any;

	/**
	 * DC
	 **/
	dc?: any;

	/**
	 * 类型
	 **/
	open_type?: any;

	/**
	 * 授权类型
	 **/
	grant_types?: any;

	/**
	 * AccessKey(AppId)
	 **/
	access_key?: any;

	/**
	 * SecretKey(AppSecret)
	 **/
	secret_key?: any;

	/**
	 * RegionId
	 **/
	region_id?: any;

	/**
	 * 管理账号token
	 **/
	access_token?: any;

	/**
	 * 管理账号token过期时间
	 **/
	expires_time?: any;

	/**
	 * 是否禁用
	 **/
	disabled?: any;

	/**
	 * 重定向地址
	 **/
	redirect_uri?: any;

	/**
	 * 描述
	 **/
	description?: any;

	/**
	 * 默认应用于
	 **/
	dc_default?: any;

	/**
	 * 预定义类型
	 **/
	predef_type?: any;

	/**
	 * AgentId
	 **/
	agent_id?: any;

	/**
	 * 重置实体数据
	 *
	 * @param {IParam} [data={}]
	 * @memberof OPEN_ACCESSBase
	 */
	reset(data: IParam = {}): void {
		super.reset(data);
		this.id = data.id || data.srfkey;
		this.name = data.name || data.srfmajortext;
	}
}
